package com.mojo.concurrent.concurrent_07_pool;

import java.util.concurrent.*;

/**
 * jdk固定线程池
 *
 * @author <a href="mailto:sjj@jianzhimao.com">mojo</a>
 * copyright (C), 2013-2021, 广州九尾信息科技有限公司
 * @date 2021/8/16 17:51
 */
public class FixedThreadPool {
    static int processors = Runtime.getRuntime().availableProcessors();

    public static void main(String[] args) {
        // 1、固定线程池，最大线程数就是核心线程数，使用LinkedBlockingQueue阻塞队列，适合执行时间稳定且固定的并发场景
        ExecutorService executor1 = Executors.newFixedThreadPool(10);
        // 2、缓冲线程池，核心线程数0，最大线程数为Integer.MAX_VALUE，使用SynchronousQueue阻塞队列，
        ExecutorService executor2 = Executors.newCachedThreadPool();
        // 3、单一线程池，只要一个Worker。单个线程的线程池，核心线程数1，最大线程数为1，使用LinkedBlockingQueue阻塞队列，就是fixed线程池核心线程数为1的情况
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        //固定个数线程池，最大线程数为Integer.MAX_VALUE，使用DelayedWorkQueue阻塞队列，相对于fixed线程池，它的最大线程数和阻塞队列不同；
        //ScheduledExecutorService的schedule()方法可以delay指定时间执行
        ScheduledExecutorService executor3 = Executors.newScheduledThreadPool(10);
        //executor3.schedule()

        //ExecutorService executor5 = Executors.newSingleThreadScheduledExecutor();
        //System.out.println(processors);
        //Future<?> submit = executor1.submit(() -> {
        //    System.out.println(21);
        //    System.out.println(21);
        //
        //});
        executor3.schedule(() -> System.out.println(Thread.currentThread().getName()), 10L, TimeUnit.SECONDS);

    }

}
